//package com.wonders.app.utils;
//
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.wonders.app.bean.NodeBean;
//import com.wonders.common.exception.RRException;
//import com.wonders.common.utils.R;
//import org.springframework.stereotype.Repository;
//import org.springframework.web.multipart.MultipartFile;
//
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.net.URLEncoder;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//import java.util.regex.PatternSyntaxException;
//
///**
// *
// *  常规的IO操作
// */
//
//@Repository
//
//public class FileUtils {
//
//
//    /**
//     * 上传文件
//     * //     * @param directory 上传的目录-相对于SFPT设置的用户访问目录，
//     * 为空则在SFTP设置的根目录进行创建文件（除设置了服务器全磁盘访问）
//     *
//     * @param
//     */
//    public static void upload(MultipartFile upload, String fileName) {
//
//
//        //根目录
//
//
//        String path = "/middle/";
//        // 使用fileupload组件完成文件上传
//        try {
//            upload.transferTo(new File(path, fileName));
//        } catch (IOException e) {
//            throw new RRException("上传文件异常" + e.getMessage());
//        }
//
//
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param downloadFile 下载的文件
//     */
//    public static R downloadStream(String downloadFile, HttpServletResponse response) {
//        String path = "/middle/" + downloadFile;
//        Map<String, Object> map = new HashMap<>();
//        // 配置文件下载
//        response.setHeader("content-type", "application/octet-stream");
//        response.setContentType("application/octet-stream");
//        // 下载文件能正常显示中文
//        try {
//            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(path, "UTF-8"));
//        } catch (UnsupportedEncodingException e) {
//            throw new RRException("下载文件异常" + e.getMessage());
//        }
//
//        File file = new File(path);
//        FileInputStream fis = null;
//        try {
//            fis = new FileInputStream(file);
//            OutputStream os = response.getOutputStream();
//            InputStreamReader reader = new InputStreamReader(fis, "GBK");
//            BufferedReader br = new BufferedReader(reader);
//            String line;
//            while ((line = br.readLine()) != null) {
//                line += '\n';
//                os.write(line.getBytes());
//                os.flush();
//            }
//            br.close();
//            reader.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            if (fis != null) {
//                try {
//                    fis.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return R.ok(map);
//
//    }
//
//
//    /**
//     * 下载文件 一个文件（到服务器的临时目录）
//     *
//     * @param downloadFile 下载的文件
//     */
//    public static R downloadOneFile(String downloadFile) {
//        String path = "/middle/" + downloadFile;
//        String pathTemp = "/temp/" + downloadFile;
//        Map<String, Object> map = new HashMap<>();
//
//
//        File file = new File(path);
//        File fileTemp = new File(pathTemp);
//        FileInputStream fis = null;
//        try {
//            fis = new FileInputStream(file);
//            OutputStream os = new FileOutputStream(fileTemp);
//            InputStreamReader reader = new InputStreamReader(fis, "GBK");
//            BufferedReader br = new BufferedReader(reader);
//            String line;
//            while ((line = br.readLine()) != null) {
//                line += '\n';
//                os.write(line.getBytes());
//                os.flush();
//            }
//            br.close();
//            reader.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        } finally {
//            if (fis != null) {
//                try {
//                    fis.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//        }
//        return R.ok(map);
//
//    }
//
//    /**
//     * 删除文件
//     * <p>
//     * directory  要删除文件所在目录
//     *
//     * @param deleteFile 要删除的文件
//     *                   String directory,
//     */
//    public static void delete(String deleteFile) {
//        String path = "/middle/" + deleteFile;
//        File file = new File(path);
//        if (file.exists()) {
//            file.delete();
//        } else {
//            throw new RRException("文件不存在");
//        }
//    }
//
//
//    /**
//     * 列出目录下的文件
//     *
//     * @param directory 要列出的目录
//     * @return list 文件名列表
//     * @throws Exception
//     */
//    static Map<String, NodeBean> nodesMy = new HashMap<String, NodeBean>();
//    static List<String> listNames = new ArrayList<>();
//
//    public static JSONArray listFiles(String directory) throws Exception {
//        clearDir();
//        nodesMy.clear();
//
//        File file = new File("/middle");
//        File[] files = file.listFiles();
//        System.out.println("长度" + files.length);
//        if (files != null) {
//            for (int i = 0; i < files.length; i++) {
//                System.out.println("目录名字：" + files[i]);
//                cutName(files[i].getName(), i);
//            }
//
//        }
//
//        listNames.clear();
//        JSONArray nodeJson = getNodeJson(directory, nodesMy);
//        System.out.println(listNames.size() + "长度");
//        for (String name : listNames) {
//            downloadOneFile(name);
//            System.out.println(name);
//        }
//        return nodeJson;
//    }
//
//
//    private static void cutName(String fileName, int keyName) {
//
//        String resultString;
//        try {
//            Pattern regex = Pattern.compile("([^\\\\/:*?\"<>|\r\n]+$)");
//            Matcher regexMatcher = regex.matcher(fileName);
//            if (regexMatcher.find()) {
//                resultString = regexMatcher.group(1);
//                System.out.println(resultString);
//                //将名称切割
//                String result[] = resultString.split("-");
//                String id = result[0];
//                String pId = result[1];
//                String name = result[2];
//                System.out.println("自身ID" + id);
//                System.out.println("父ID" + pId);
//                System.out.println("名字" + name);
//                //是文件
//                if (name.contains(".")) {
//                    nodesMy.put(String.valueOf(keyName), new NodeBean(id, name, pId, "f"));
//                } else {
//                    //是目录
//                    nodesMy.put(String.valueOf(keyName), new NodeBean(id, name, pId, "d"));
//                }
////               System.out.println("result:" + JSON.toJSONString(getNodeJson("0", nodesMy)));
//            }
//        } catch (PatternSyntaxException ex) {
//            System.out.println(ex.getMessage());
//        }
//
//    }
//
//    /**
//     * 递归处理   数据库树结构数据->树形json
//     *
//     * @param nodeId
//     * @param nodes
//     * @return
//     */
//
//
//    public static JSONArray getNodeJson(String nodeId, Map<String, NodeBean> nodes) {
//        //当前层级当前node对象
////        NodeBean cur = nodes.get(nodeId);
//        //当前层级当前点下的所有子节点（实战中不要慢慢去查,一次加载到集合然后慢慢处理）
//        List<NodeBean> childList = getChildNodes(nodeId, nodes);
//        JSONArray childTree = new JSONArray();
//        //具体的某个节点
//        for (NodeBean node : childList) {
//            listNames.add(node.getId() + "-" + node.getPId() + "-" + node.getName());
//            JSONObject o = new JSONObject();
//            o.put("name", node.getName());
//            o.put("pId", node.getPId());
//            o.put("id", node.getId());
//            o.put("type", node.getType());
//
//            JSONArray childs = getNodeJson(node.getId(), nodes);  //递归调用该方法
//            if (!childs.isEmpty()) {
//                o.put("childrens", childs);
//            }
//            childTree.fluentAdd(o);
//        }
//        return childTree;
//    }
//
//    /**
//     * 获取当前节点的所有子节点
//     *
//     * @param nodeId
//     * @param nodes
//     * @return
//     */
//    public static List<NodeBean> getChildNodes(String nodeId, Map<String, NodeBean> nodes) {
//        List<NodeBean> list = new ArrayList<NodeBean>();
//        //循环遍历整个数据，找到要查询的某个节点id，node的父亲节点。相等。加入如list，就是这个nodeId的所有子节点
//        for (String key : nodes.keySet()) {
//            System.out.println("map 的 key= " + key);
//            //节点的父节点等于当前节点
//            if (nodes.get(key).getPId().equals(nodeId)) {
//                list.add(nodes.get(key));
//            }
//        }
//        System.out.println("当前节点下的所有节点" + list.size());
//        return list;
//    }
//
//
//    /**
//     * 更改文件名
//     */
//    public static void rename(String oldFileName, String newFileName) {
//
//        String oldPath = "/middle/" + oldFileName;
//        String newPath = "/middle/" + newFileName;
//        File file = new File(oldPath);
//        if (file.exists()) {
//            file.renameTo(new File(newPath));
//        } else {
//            throw new RRException("文件不存在");
//        }
//
//    }
//
//
//    /***
//     *  清空文件夹
//     *
//     */
//    public static void clearDir() {
//        File file = new File("/data/temp");
//        File[] files = file.listFiles();
//        if (files != null) {
//            for (File f : files) {
//
//                f.delete();
//
//            }
//        }
//
//    }
//}
//
